#ifndef __MYSTRING_H_
#define __MYSTRING_H_

#include <cstring>
#include <iostream>
class MyStringArray;
class MyString
{
public:
    MyString();
    MyString(const char *str);
    MyString(const MyString& str);
    MyString& operator=(const MyString& str);
    ~MyString();

    MyString& operator+=(const MyString& str);
    MyString& operator+=(const char& c);
    MyString operator+(const MyString& str);


    MyString& operator-=(const MyString& str);
    MyString operator-(const MyString& str);

    char& operator[](int index);

    bool operator==(const MyString& str);
    bool operator!=(const MyString& str);
    bool operator&&(const MyString& str);

    //类型转换运算符重载
    operator int();
    operator double();


    //字符串切割
   MyStringArray split(const MyString& delim);

    friend std::ostream& operator<<(std::ostream &os,const MyString& str);
    friend std::istream& operator>>(std::istream &is,MyString& str);
private:
    void ReSize(int capacity);
    char *s;
    int size;
    int capacity;
};

std::ostream& operator<<(std::ostream &os,const MyString& str);
std::istream& operator>>(std::istream &is,MyString& str);


class MyStringArray
{
public:
    MyStringArray();
    MyStringArray(const MyString& str);
    MyStringArray(const MyStringArray& a);
    MyStringArray &operator=(const MyStringArray& a);
    ~MyStringArray();

    //+ -= - == [] >>
    MyStringArray& operator+=(const MyString& str);
    MyStringArray& operator+=(const char& str);
    MyStringArray& operator+=(const MyStringArray& str);
    MyStringArray operator+(const MyString& str);
    MyStringArray operator+(const MyStringArray& str);

    MyStringArray& operator-=(const MyString& str);
    MyStringArray& operator-=(const MyStringArray& str);
    MyStringArray operator-(const MyString& str);
    MyStringArray operator-(const MyStringArray& str);

    bool operator==(const MyString& str);
    bool operator==(const MyStringArray& str);
    bool operator!=(const MyString& str);
    MyString& operator[](int index);

    friend std::ostream& operator<<(std::ostream &os,const MyStringArray &a);
    friend std::istream& operator>>(std::istream &is,MyStringArray &a);
private:
    void ReSizeArray(int capacity);
    MyString *array;
    int size;
    int capacity;
};

std::ostream& operator<<(std::ostream &os,const MyStringArray &a);
std::istream& operator>>(std::istream &is,MyStringArray &a);

#endif